package com.system.service.impl;

import com.system.common.MD5;
import com.system.common.Mail;
import com.system.common.emailUtil;
import com.system.service.FileService;
import com.system.service.dao.model.Filedata;
import org.springframework.stereotype.Service;

import java.io.File;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by lenovo on 2016/4/10.
 */
@Service
public class FileServiceImpl implements FileService {

    private static Map<String,Filedata> filedataMap=new HashMap<>();


    @Override
    public List<Filedata> getfileIst() {
        return null;
    }

    @Override
    public int insert(Filedata filedata) {
        return 0;
    }


    public   void initAllFiles(File dir) throws Exception{
        Filedata.status=1;
        File[] fs = dir.listFiles();
        for(int i=0; i<fs.length; i++){
            if(fs[i].isFile()) {
                String filename=fs[i].getAbsolutePath();
                long lasttime = fs[i].lastModified(); //最后的更改时间
                Format simpleFormat = new SimpleDateFormat("E dd MMM yyyy hh:mm:ss a");
                String dateString = simpleFormat.format(lasttime);  // 存入的时间
                String filelength = fs[i].length() + "";
                String alloffile= MD5.encodeMD5(dateString+filelength);
                Filedata filedata=new Filedata();
                filedata.setFilename(filename);
                filedata.setFilehash(alloffile);
                filedataMap.put(filename,filedata);
            }
            if(fs[i].isDirectory()&& !fs[i].getName().equals("WEB-INF")){ //WEB-INF下的不可能修改
                try{
                    initAllFiles(fs[i]);
                }catch(Exception e){}
            }
        }
    }
    public  void cheak(Filedata filedata, String alloffile){
        if(!filedata.getFilehash().equals(alloffile)){
            //说明不相等 发送信息说明 文件被篡改了 人工恢复
            Mail mail = new Mail();
            mail.setHost("smtp.163.com"); // 设置邮件服务器,如果不用163的,自己找找看相关的 qq 邮箱需要满一个月才能够开启smtp功能
            mail.setSender("fangcuangai2016@163.com");
            mail.setReceiver("fangcuangai2016@163.com"); // 接收人
            mail.setUsername("fangcuangai2016@163.com"); // 登录账号,一般都是和邮箱名一样吧
            mail.setPassword("fangcuangai"); // 发件人邮箱的登录密码
            mail.setSubject("安全");
            mail.setMessage("出了问题的文件"+filedata.getFilename());
            new emailUtil().send(mail);
        }
        else {
            System.out.print("没有出现异常");
        }
    }
    public  void show(File dir) throws Exception{
        File[] fs = dir.listFiles();
        for(int i=0; i<fs.length; i++){
            if(fs[i].isFile()) {
                String filename=fs[i].getAbsolutePath();
                long lasttime = fs[i].lastModified(); //最后的更改时间
                Format simpleFormat = new SimpleDateFormat("E dd MMM yyyy hh:mm:ss a");
                String dateString = simpleFormat.format(lasttime);  // 存入的时间
                String filelength = fs[i].length() + "";
                String alloffile= MD5.encodeMD5(dateString+filelength);
                Filedata filedata= filedataMap.get(filename);
                cheak(filedata,alloffile);  //调用检查的方法
            }
            if(fs[i].isDirectory()&& !fs[i].getName().equals("WEB-INF")){ //WEB-INF下的不可能修改
                try{
                    show(fs[i]);
                }catch(Exception e){}
            }
        }
    }


}
